package com.ruoyi.system.api.service;

import com.ruoyi.system.api.ResponseWithData;
import com.ruoyi.system.api.domain.PlanDetails;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * 工程师FSE计划详情 工程师FSE计划详情Service接口
 * 
 * @author ruoyi
 * @date 2020-03-03
 */
public interface IPlanDetailsService
{
    /**
     * 查询工程师FSE计划详情 工程师FSE计划详情
     * 
     * @param id 工程师FSE计划详情 工程师FSE计划详情ID
     * @return 工程师FSE计划详情 工程师FSE计划详情
     */
    public PlanDetails selectStPlanDetailsById(Long id);

    /**
     * 查询工程师FSE计划详情 工程师FSE计划详情列表
     * 
     * @param stPlanDetails 工程师FSE计划详情 工程师FSE计划详情
     * @return 工程师FSE计划详情 工程师FSE计划详情集合
     */
    public List<PlanDetails> selectStPlanDetailsList(PlanDetails stPlanDetails);

    /**
     * 新增工程师FSE计划详情 工程师FSE计划详情
     * 
     * @param stPlanDetails 工程师FSE计划详情 工程师FSE计划详情
     * @return 结果
     */
    public int insertStPlanDetails(PlanDetails stPlanDetails);

    /**
     * 修改工程师FSE计划详情 工程师FSE计划详情
     * 
     * @param stPlanDetails 工程师FSE计划详情 工程师FSE计划详情
     * @return 结果
     */
    public int updateStPlanDetails(PlanDetails stPlanDetails);

    /**
     * 批量删除工程师FSE计划详情 工程师FSE计划详情
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteStPlanDetailsByIds(String ids);

    /**
     * 删除工程师FSE计划详情 工程师FSE计划详情信息
     * 
     * @param id 工程师FSE计划详情 工程师FSE计划详情ID
     * @return 结果
     */
    public int deleteStPlanDetailsById(Long id);

    /**
     * 获取员工服务单各种状态的数量接口
     * @methodName: getFseStateCounts
     * @description: TODO
     * @param EnginnerId
     * @return: java.util.List<com.ruoyi.system.api.domain.PlanDetails>
     * @author: shihx
     * @date: 2020/3/5 16:33
    **/
    public ResponseWithData<?> getFseStateCounts(String EnginnerId);

    /**
     * 获取FSE计划安排接口
     * @methodName: getFsePlan
     * @description: TODO
     * @param EnginnerId
     * @param StartTime
     * @param EndTime
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/6 14:47
    **/
    public ResponseWithData<?> getFsePlan(String EnginnerId, String StartTime, String EndTime);
   
    /**
     * FSE接受服务接口
     * @methodName: fseAccept
     * @description: TODO
     * @param ServiceNoticeIds
     * @param serviceNos
     * @param planIds
     * @param EnginnerId
     * @param serviceRole	
     * @param StartTime	
     * @param workingHours	
     * @param EndTime	
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/7 8:36
    **/
    public ResponseWithData<?> fseAccept(String ServiceNoticeIds, String serviceNos, String planIds, String EnginnerId, String serviceRole, String StartTime, String workingHours, String EndTime,Double signOffAutoHour) throws Exception;

    /**
     * FSE再次上门
     * @methodName: fseAccept
     * @description: TODO
     * @param ServiceNoticeIds
     * @param serviceNos
     * @param planIds
     * @param EnginnerId
     * @param serviceRole
     * @param StartTime
     * @param workingHours
     * @param EndTime
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/7 8:36
     **/
    public ResponseWithData<?> updatefseAccept(String ServiceNoticeIds, String serviceNos, String planIds, String EnginnerId, String serviceRole, String StartTime, String workingHours, String EndTime, String enginnerName,Double signOffAutoHour) throws Exception;

    /**
     * FSE拒绝服务接口
     * @methodName: fseRefuse
     * @description: TODO
     * @param ServiceNoticeId
     * @param serviceNo
     * @param EnginnerId
     * @param refusalReasons
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/7 9:45
    **/
    public ResponseWithData<?> fseRefuse(String ServiceNoticeId, String serviceNo, String EnginnerId, String refusalReasons, String planId, String enginnerName) throws Exception;

    /**
     * FSE签到服务接口
     * @methodName: fseSign
     * @description: TODO
     * @param ServiceNoticeIds
     * @param serviceNos
     * @param planIds
     * @param EnginnerId
     * @param longitude
     * @param latitude
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/9 9:19
    **/
    public ResponseWithData<?> fseSign(String ServiceNoticeIds, String serviceNos ,String planIds, String EnginnerId, String longitude, String latitude,String relServiceNo) throws Exception;

    /**
     * FSE签离服务接口
     * @methodName: fseSignOff
     * @description: TODO
     * @param ServiceNoticeId
     * @param serviceNo
     * @param EnginnerId
     * @param longitude
     * @param latitude
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/9 10:49
    **/
    public ResponseWithData<?> fseSignOff(String ServiceNoticeId, String serviceNo, String EnginnerId ,String customerName,String signInTime, String longitude, String latitude, String state) throws Exception;


    /**
     * 需要批量签离服务单子说明
     * @methodName: fseSignOff
     * @description: TODO
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020/3/9 10:49
     **/
    public List<PlanDetails>  fseSignOffBatchPlain(String ServiceNoticeId, String EnginnerId, String signInTime, String signIn, String fillInLog, String state, String planId) throws Exception;

    /**
     * FSE签离服务预计再次上门接口
     * @methodName: fseSignOff
     * @description: TODO
     * @param ServiceNoticeId
     * @param serviceNo
     * @param EnginnerId
     * @param longitude
     * @param latitude
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: sjy
     * @date: 2020年3月26日16:37:56
     **/
    public ResponseWithData<?> fseSignOffAgain(String ServiceNoticeId,  String EnginnerId ,String customerName,String signInTime, String longitude, String latitude, String state,String estimatedVisitingTime,String estimatedWorkingHours,String estimatedDepartureTime,Double signOffAutoHour) throws Exception;


    /**
     * 查询服务详情
     * @methodName: getPlanDetails
     * @description: TODO
     * @param stPlanDetails
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: sjy
     * @date: 2020年3月9日18:05:12
     **/
    public PlanDetails getPlanDetails(PlanDetails stPlanDetails);

    /**
     * 查询工作计划
     * @methodName: selectFseWorkPlan
     * @description: TODO
     * @param param
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: wlf
     * @date: 2020年3月20日11:03:12
     **/
    public ResponseWithData<?> selectFseWorkPlan(Map<String, String> param);

    /**
     * 修改工作计划
     * @methodName: selectFseWorkPlan
     * @description: TODO
     * @param planDetails
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: wlf
     * @date: 2020年3月26日13:27:12
     **/
    public int updatePlanWidthIds(Map<String, String> planDetails);

    /**
     * 自动签离的服务单改为已完成
     * @methodName: signOffAutoState
     * @description: TODO
     * @param serviceNoticeId
     * @param enginnerId
     * @param planId
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020-04-08 16:23
    **/
    public ResponseWithData<?> signOffAutoState(String serviceNoticeId, String enginnerId, String planId) throws Exception;

    /**
     * fseSignOffAutoAgain
     * @methodName: fseSignOffAutoAgain
     * @description: TODO
     * @param serviceNoticeId
     * @param serviceNo
     * @param enginnerId
     * @param estimatedVisitingTime
     * @param estimatedWorkingHours
     * @param estimatedDepartureTime
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020-04-08 19:18
    **/
    public ResponseWithData<?> fseSignOffAutoAgain(String serviceNoticeId, String serviceNo, String enginnerId, String planId, String estimatedVisitingTime, String estimatedWorkingHours, String estimatedDepartureTime, Double    signOffAutoHour) throws Exception;

    /**
     * TL查询下级FSE未填写日志的数据
     * @methodName: fseFillLogCount
     * @description: TODO
     * @param enginnerId
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020-04-09 17:15
    **/
    public ResponseWithData<?> fseFillLogCount(String enginnerId) throws Exception;

    /**
     * 更改预计上门时间
     * @methodName: updateEstimatedVisitingTime
     * @description: TODO
     * @param planId
     * @param estimatedVisitingTime
     * @param estimatedWorkingHours
     * @param estimatedDepartureTime
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020-04-14 15:34
    **/
    public ResponseWithData<?> updateEstimatedVisitingTime(String planId, String enginnerId, String estimatedVisitingTime, String estimatedWorkingHours, String estimatedDepartureTime,Double signOffAutoHour) throws Exception;

    /**
     * 工作计划——根据ids查询任务列表
     * @param params
     * @return
     */
    List<PlanDetails> selectWorkPlanList(Map<String, Object> params);

    /**
     * 有下次预计上门查询最后一次签离的ID
     * @methodName: selectOldPlanDetailId
     * @description: TODO
     * @param planDetails
     * @return: com.ruoyi.system.api.domain.PlanDetails
     * @author: shihx
     * @date: 2020-04-25 16:43
    **/
    public PlanDetails selectOldPlanDetailId(PlanDetails planDetails);

    /**
     * 获取上次的planId
     * @methodName: selectOldPlanDetailId
     * @description: TODO
     * @param planDetails
     * @return: com.ruoyi.system.api.domain.PlanDetails
     * @author: shihx
     * @date: 2020-04-25 16:43
     **/
    public PlanDetails selectAllOldPlanDetailId(PlanDetails planDetails);
    /**
     * 验证时间是否冲突
     * @methodName: checkPlanDetailsList
     * @description: TODO
     * @param planId	
     * @param enginnerId	
     * @param estimatedVisitingTime	
     * @param estimatedDepartureTime	
     * @return: com.ruoyi.system.api.ResponseWithData<?>
     * @author: shihx
     * @date: 2020-05-12 16:45
    **/
    public ResponseWithData<?> checkPlanDetailsList(String planId, String enginnerId, String estimatedVisitingTime, String estimatedDepartureTime) throws Exception;
    

}
